"""
    正则表达式
    match   从头开始匹配第一个
    search  全局匹配第一个
    findall 全局匹配所有的， 返沪一个列表
    sub 正则替换
    split 分割
"""

import re
from itertools import count
from tokenize import group
#print(re.match('www', 'www.runoob.com'))  # 在起始位置匹配
#print(re.match('com', 'www.runoob.com'))
pr = re.match(r'\w*@(163|126)\.com', 'runoob@163.com')
print(pr.group())
pr = re.match(r'(<\w*>)\w*@(163|126)\.com(<\w*>)', '<mail>runoob@163.com<mail>')
print(pr.group())
#\num 分组
pr = re.match(r'(<\w*>)\w*@(163|126)\.com\1', '<mail>runoob@163.com<mail>') #r'(<\w*>)\w*@(163|126)\.com(\1)'
print(pr.group())

# 分组取别名 ?P<name> ?P=name
pr = re.match(r'<(?P<l1>\w*)><(?P<l2>\w*)>[\w|\s]*</(?P=l2)></(?P=l1)>', '<html><body>小 测 验</body></html>')
print(pr.group())

#替换
print(re.sub("163", "lzm", "<mail>runoob@163163.com<mail>", count = 1))

#分割
print(re.split(r"\n", "第一行\n第二行\n第三行"))  #['第一行', '第二行', '第三行']

#贪婪匹配/非贪婪匹配？
#  匹配模式中 默认是非贪婪匹配（匹配时，匹配尽可能长的字符串
print(re.match(r"em+", "emmmmmmmm").group())  # >>> emmmmmmmm
print(re.match(r"em+?", "emmmmmmmm").group()) # >>> em

#正则表达式中匹配\ 需要 两个\\
print(re.match("\\\\", "\测试").group())
print(re.match(r"\\", "\测试").group())


#非捕获分组
test_date = "2024-09-25"
# 捕获分组的正则表达式
pattern_with_capture = r'\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[01])'
match_with_capture = re.match(pattern_with_capture, test_date)
if match_with_capture:
    print(match_with_capture.groups())      #('09', '25')

pattern_without_capture = r'\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[01])'
match_without_capture = re.match(pattern_without_capture, test_date)
if match_without_capture:
    print(match_without_capture.groups())   #()

# def my_sub(pattern, repl, string, *args, count=0, flags=0):
#     print(f"pattern: {pattern}")
#     print(f"repl: {repl}")
#     print(f"string: {string}")
#     print(f"args: {args}")
#     print(f"count: {count}")
#     print(f"flags: {flags}")
#
# # 调用函数并传入 *args 参数
# my_sub(r'\d', 'X', 'abc123', 'extra_arg1', 'extra_arg2', count=1, flags=re.IGNORECASE)



